package com.one.tank;

import java.io.File;
import java.io.InputStream;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioInputStream;

//设置游戏音乐
public class GameMusic {
    //游戏音乐 支持音乐格式（AITF、AU、WAV），就是加载有点慢啊-->注意所支持的音乐格式
    //音频输入流
    private AudioInputStream stream;
    //音频格式
    private AudioFormat format;
    //音频剪辑
    private Clip clip;
    /**
     * 功能：构造函数
     */
    public GameMusic(String fileName) {
        try {
            File file = new File(fileName);
            //将音乐文件转为音频输入流
            this.stream = AudioSystem.getAudioInputStream(file);
            //得到音频格式
            this.format = stream.getFormat();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 构造函数
     *
     * @param fileName URL文件名
     */
    public GameMusic(InputStream fileName) {
        try {
            //将音乐文件转为音频输入流
            this.stream = AudioSystem.getAudioInputStream(fileName);
            //得到音频格式
            this.format = stream.getFormat();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 功能：播放音乐
     * 参数：boolean loop -> 是否循环（True-无限循环，False-不循环）
     */
    public void play(boolean loop) {
        try {
            //设置音频行信息
            DataLine.Info info = new DataLine.Info(Clip.class, this.format);
            //建立音频行信息
            this.clip = (Clip) AudioSystem.getLine(info);
            this.clip.open(this.stream);
            if (loop){
                //无限循环
                this.clip.loop(Clip.LOOP_CONTINUOUSLY);
            }
            else {
                this.clip.loop(0);
            }
            this.clip.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 功能：停止音乐
     */
    public void stop() {
        try {
            if (this.clip.isRunning()) {
                this.clip.stop();
                this.clip.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
